package com.patrol.logisticsmanage.net;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/** 通过初始化okhttp和retrofit,获取ApiServise的实例
 * 主要做retrofit绑定okhttp,然后通过retrofit的实例
 * 获取ApiServise的实例
 */
public class BaseRequest {
    //初始化Okhttp,绑定拦截器事件
    OkHttpClient client=new OkHttpClient.Builder().
            connectTimeout(20, TimeUnit.SECONDS).                   //设置请求超时时间
            readTimeout(20,TimeUnit.SECONDS).                       //设置读取数据超时时间
            writeTimeout(20,TimeUnit.SECONDS).                      //设置写入数据超时时间
            addInterceptor(InterceptorUtil.LogInterceptor()).                //绑定日志拦截器
            addNetworkInterceptor(InterceptorUtil.HeaderInterceptor(AppConfig.getString("token")))       //绑定header拦截器
            .build();

    Retrofit retrofit=new Retrofit.Builder().
            addConverterFactory(GsonConverterFactory.create()).             //设置gson转换器,将返回的json数据转为实体
            addCallAdapterFactory(RxJavaCallAdapterFactory.create()).       //设置CallAdapter
            baseUrl(ApiServise.HOST).
            client(client)                                                  //设置客户端okhttp相关参数
            .build();


    public static BaseRequest instance;
    public ApiServise apiServise=retrofit.create(ApiServise.class);         //通过retrofit的实例,获取ApiServise接口的实例

    private BaseRequest(){

    }

    public void reset(String token){
        client=new OkHttpClient.Builder().
                connectTimeout(20, TimeUnit.SECONDS).                   //设置请求超时时间
                readTimeout(20,TimeUnit.SECONDS).                       //设置读取数据超时时间
                writeTimeout(20,TimeUnit.SECONDS).                      //设置写入数据超时时间
                addInterceptor(InterceptorUtil.LogInterceptor()).                //绑定日志拦截器
                addNetworkInterceptor(InterceptorUtil.HeaderInterceptor(token))       //绑定header拦截器
                .build();
        retrofit=new Retrofit.Builder().
                addConverterFactory(GsonConverterFactory.create()).             //设置gson转换器,将返回的json数据转为实体
                addCallAdapterFactory(RxJavaCallAdapterFactory.create()).       //设置CallAdapter
                baseUrl(ApiServise.HOST).
                client(client)                                                  //设置客户端okhttp相关参数
                .build();
        apiServise=retrofit.create(ApiServise.class);
    }

    public static BaseRequest getInstance(){
        if(instance==null){
            synchronized (BaseRequest.class){
                if(instance==null){
                    instance=new BaseRequest();
                }
            }
        }
        return instance;
    }

    public ApiServise getApiServise(){
        return apiServise;
    }


    /**
     *      * 调用网络请求方法
     *

    public void getData() {
     *BaseRequest.getInstance().getApiServise().getMeiZi("604392760").subscribeOn(Schedulers.io()).
                * observeOn(AndroidSchedulers.mainThread()).subscribe(new BaseObserver<List<MeiZiResponse>>(this) {
     *@Override
     *

            public void onSuccess(BaseReponse<List<MeiZiResponse>> t) {
     *            //成功回调方法,可以直接在此更新ui,AndroidSchedulers.mainThread()表示切换到主线程
     *}
     *
             *@Override
     *

            public void onCodeError(BaseReponse baseReponse) {
     *             //失败回调方法,可以直接在此更新ui,AndroidSchedulers.mainThread()表示切换到主线程
     *}
     *
             *@Override
     *

            public void onFailure(Throwable e, boolean netWork) throws Exception {
     *
     *}
     *
        });
     *}
     *
     */
}

